package com.base;

/**
 * Created by zhuangqi on 2016/12/13.
 */

class Base {
    public static String s = "static_base";
    public String m = "base";

    public static void staticTest() {
        System.out.println("base static" + s);
    }
}

class Child extends Base {
    public static String s = "child_base";
    public String m = "child";

    public static void staticTest() {
        System.out.println("child static" + s);
    }
}
/*
当通过b (静态类型Base) 访问时，访问的是Base的变量和方法，
当通过c (静态类型Child)访问时，访问的是Child的变量和方法，
这称之为静态绑定，即访问绑定到变量的静态类型，静态绑定在程序编译阶段即可决定，而动态绑定则要等到程序运行时。
实例变量、静态变量、静态方法、private方法，都是静态绑定的
*/
public class StaticBinding {
    public static void main(String[] args) {
        Child c = new Child();
        Base b = c;
        System.out.println(b.s);
        System.out.println(b.m);
        b.staticTest();

        System.out.println(c.s);
        System.out.println(c.m);
        c.staticTest();
    }
}
